Previous

2.13 字符串对齐

问题

你想通过某种对齐方式来格式化字符串

解决方案

对于基本的字符串对齐操作,可以使用字符串的 ljust() , rjust()center() 方法。比如:


In [1]:
text = "Hello World"
text.ljust(20)


Out[1]:
'Hello World         '

In [2]:
text.rjust(20)


Out[2]:
'         Hello World'

In [3]:
text.center(20)


Out[3]:
'    Hello World     '

所有这些方法都能接受一个可选的填充字符。比如:


In [4]:
text.rjust(20, "=")


Out[4]:
'=========Hello World'

In [5]:
text.center(20, "*")


Out[5]:
'****Hello World*****'

函数 format() 同样可以用来很容易的对齐字符串。 你要做的就是使用 <,> 或者 ^ 字符后面紧跟一个指定的宽度。比如:


In [6]:
format(text, ">20")


Out[6]:
'         Hello World'

In [7]:
format(text, "<20")


Out[7]:
'Hello World         '

In [8]:
format(text, "^20")


Out[8]:
'    Hello World     '

如果你想指定一个非空格的填充字符,将它写到对齐字符的前面即可:


In [9]:
format(text, "=>20s")


Out[9]:
'=========Hello World'

In [10]:
format(text, "*^20s")


Out[10]:
'****Hello World*****'

当格式化多个值的时候,这些格式代码也可以被用在 format() 方法中。比如:


In [11]:
"{:>10s} {:>10s}".format("Hello", "World")


Out[11]:
'     Hello      World'

format() 函数的一个好处是它不仅适用于字符串。它可以用来格式化任何值,使得它非常的通用。 比如,你可以用它来格式化数字:


In [12]:
x = 1.2345
format(x, ">10")


Out[12]:
'    1.2345'

In [13]:
format(x, "^10.2f")


Out[13]:
'   1.23   '

讨论

在老的代码中,你经常会看到被用来格式化文本的 % 操作符。比如:


In [14]:
"%-20s" % text


Out[14]:
'Hello World         '

In [15]:
"%20s" % text


Out[15]:
'         Hello World'

但是,在新版本代码中,你应该优先选择 format() 函数或者方法。 format() 要比 % 操作符的功能更为强大。 并且 format() 也比使用 ljust() , rjust()center() 方法更通用, 因为它可以用来格式化任意对象,而不仅仅是字符串。

如果想要完全了解 format() 函数的有用特性, 请参考 在线 Python 文档

Next